home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 98 / Skunkware 98.iso / osr5 / sco / scripts / admin / fdminor < prev    next >
Encoding:
Korn shell script  |  1997-08-26  |  2.4 KB  |  97 lines

  1. #!/bin/ksh
  2. # fdminor: show meaning of floppy drive device minor bits
  3. # @(#) fdminor.ksh 1.0 93/02/17
  4. # 93/02/17 john h. dubois iii (john@armory.com)
  5.  
  6. name=${0##*/}
  7.  
  8. if [ $# -eq 0 -o "$1" = -h ]; then
  9.     echo \
  10. "$name: show meaning of floppy drive device node minor number.
  11. Syntax: $name [-h] <minor_num>|<device-name> ...
  12. The meaning of the bit fields of the minor number will be printed.
  13. If a device name is given, its minor number is looked up.
  14. Options: -h prints this help.
  15.  
  16. Minor number meaning:
  17. bits    meaning            value
  18. 7    ignore cylinder 0    0: use cylinder 0; 1: skip cylinder 0
  19. 6    autodetect floppy type    0: no autodetect; 1: autodetect
  20.                 (bits 5..3 should be 0)
  21. 5    tracks per side        0: 40 tracks/side; 1: 80 tracks/side
  22. 4,3    sectors per track    0: 9 spt; 1: 8 spt; 2: 15 spt; 3: 18 spt
  23. 2    sides            0: single sided; 1: double sided
  24. 2,1    floppy drive number    0..3: drive number 0..3"
  25.     exit
  26. fi
  27.  
  28. set -A sptvals 9 8 15 18
  29. set -A trackvals 40 80
  30.  
  31. device=
  32.  
  33. alias istrue="test 0 -ne"
  34. alias isfalse="test 0 -eq"
  35.  
  36. function fdminor {
  37.     typeset IFS=" ," device
  38.     typeset -i10 major minor cylinder0 autodetect tracks spt sides drivenum
  39.  
  40.     case "$1" in
  41.     [0-9]*) minor=$1;;
  42.     ./*|../*|/*) device=$1;;
  43.     *) device=/dev/$1;;
  44.     esac
  45.  
  46.     if [ -n "$device" ]; then
  47.     set -- `l $device`
  48.     [ -z "$6" ] && return
  49.     if [[ "$1" != [cb]* ]]; then
  50.         echo "$device is not a device file."
  51.         return
  52.     fi
  53.     major=$5
  54.     minor=$6
  55.     if [[ "$5" != 2 ]]; then
  56.         echo "Warning: $device is not a floppy device."
  57.     fi
  58.     echo "Device $device (minor number $minor):"
  59.     else
  60.     echo "Minor number $minor:"
  61.     fi
  62.  
  63.     if [ $minor -gt 255 -o $minor -lt 0 ]; then
  64.         echo "Minor number must be in the range 0-255!"
  65.         exit 1
  66.     fi
  67.  
  68.     cylinder0="minor&2#10000000"
  69.     autodetect="minor&2#1000000"
  70.     tracks="${trackvals[$(((minor&2#100000)>>5))]}"
  71.     spt="${sptvals[$(((minor&2#11000)>>3))]}"
  72.     sides="((minor&2#100)>>2)+1"
  73.     drivenum="minor&2#11"
  74.  
  75.     isfalse cylinder0 && print "Uses cylinder 0" || print "Skips cylinder 0"
  76.  
  77.     if istrue autodetect; then
  78.     print "tracks/side, sectors/track, sides: autodetected"
  79.     else
  80.     print "$tracks tracks/side"
  81.     print "$spt sectors/track"
  82.     print "$sides side(s)"
  83.     istrue cylinder0 && tracks=tracks-1
  84.     capacity=$((tracks * spt * sides * 512))
  85.     print "Capacity: $capacity bytes ($((capacity / 1024))K)"
  86.     fi
  87.     print "drive number: $drivenum"
  88. }
  89.  
  90. fdminor "$1"
  91. shift
  92.  
  93. for arg; do
  94.     echo ""
  95.     fdminor "$arg"
  96. done
  97.